perm filename LODLAP.MAN[VLI,LSP] blob sn#382024 filedate 1978-09-08 generic text, type T, neo UTF8











                                   CHAPITRE 11

                             LE LAP ET LE LAPACK



     LAP est un assembleur (ressemblant a l'assembleur du  PDP10),  concu
     pour  etre  utilise  par  VLISP-10.3  et  prevu  originellement pour
     charger le code issu du compilateur.  Il peut etre utilise seul pour
     ecrire   de   nouvelles   fonctions   standards.    Un   minimum  de
     connaissances  de  l'assembleur  PDP10  et  de   l'organisation   de
     l'interprete est requis pour utiliser le LAP sans degats.
     LAP recoit en argument une liste dont les elements peuvent etre :
     - des atomes litteraux (qui servent d'etiquettes)
     - des   listes   representant   des   instructions   normales,   des
     pseudos-instructions, ou des macros-LAPs (MACLAPs).
     Cette liste peut etre remplacee par un fichier  s'il  y  a  beaucoup
     d'instructions a charger.

     Apres assemblages ces instructions sont chargees en memoire dans une
     zone  code  prevue a cet effet.  Si cette zone se revele trop petite
     une erreur apparait;  le libelle de cette erreur est :
        ** no room for code.
     Cette erreur est fatale.  Il faut augmenter la  taille  de  la  zone
     allouee  au  code (dans la fonction CONFIGURATION du fichier initial
     CONFIG.INI) et relancer tout le chargement.



     11.1  LES REGISTRES

     L'interprete utilise les 16 registres de la machine  de  la  maniere
     suivante :

     no symbol       remarques

     00 RG   est le registre general lui-meme. On peut donc tester 
             directement au moyen d'un masque les bits utiles.

     01 A1   accumulateur 1  !
     02 A2   accumulateur 2  !  Seuls ces 4 registres sont nettoyes par
     03 A3   accumulateur 3  !  le G.C.
     04 A4   accumulateur 4  !
     VLISP 10 . 3    Manuel de Reference                        Page 11-2


     05 A5   accumulateur 5
     06 A6   accumulateur 6    Ces 4 registres font office de registres
     07 A7   accumulateur 7    auxiliaires.
     10 A8   accumulateur 8

     11 U1   user 1          !  Ces 2 registres ne sont
     12 U2   user 2          ! jamais utilises par l'interprete 
                             ! et sont donc reserves pour l'utilisateur.

     13 L    link    est utilise pour les appels de S.P
                     de type JSP.

     14 STRG         contient toujours le pointeur sur la liste
                     libre des chaines.

     15 NUMB         contient toujours le pointeur sur la liste
                     libre des nombres.

     16 FREE         contient toujours le pointeur sur la liste
                     libre des listes.

     17 P            est le pointeur sur l'unique pile utilisee
                     par l'interprete.



     11.2  FORMAT EXTERNE D'UNE INSTRUCTION

     Chaque instruction est representee par une liste de la forme :

          ( <codop> <registre> @ <adr> <index> )

     <codop> - est le mnemonique de l'instruction (tous  les  mnemoniques
     des  instructions PDP10 sont disponibles en revanche les mnemoniques
     des CALLI et des TTCALL ne le sont pas).

     <registre> - est le numero ou le symbole du registre 1er operande.

     @ - si  cet  atome  est  present  (et  a  cette  position),  le  bit
     d'indirection de l'instruction sera positionne.

     <adr> - represente la valeur du champ adresse qui sera  charge  dans
     les  18 bits de poids faibles de l'instruction (la description de ce
     champ suit).

     <index> - est le numero  ou  le  symbole  du  registe  d'index.   Ce
     dernier champ est optionnel.

           le champ <adr> peut avoir la representation suivante :

     - un nombre (utilise dans  les  intructions  possedant  des  valeurs
     immediates).
     VLISP 10 . 3    Manuel de Reference                        Page 11-3


     - un atome litteral qui peut etre :
          - un symbole de registre
          - une etiquette
          - un symbole special.  LAP connait en effet certaines  adresses
          utiles  de  l'interprete.  Ces adresses ont ete chargees par le
          LINK-10 .  Elles sont representees par un symbole dont  le  1er
          caractere est toujours un " :  ".
     - une liste representant :
          - ( nombre ) une adresse relative au debut de chargement.
          - (* nombre) une adresse relative au compteur d'assemblage.
          - (QUOTE objet lisp) ou ' objet lisp  ,  l'adresse  de  l'objet
          lisp  specifie.   Cette  adresse  est en realite l'index de cet
          objet par rapport au debut de la zone des objets lisps.
          - (+ <adr1> ...  <adrN> ) la  somme  des  differentes  adresses
          specifiees.
          - (:MEM <adr>) cet operande est la forme abregee de :
              (+ :MEM <adr>).

          exemples d'instructions :

          (MOVEI A1 2)
          (MOVE A1 @ TAB A5)
          (CAML A4 :BLIST)
          (JRST 0 (* -5))
          (CAIE A4 'LAMBDA)
          (HRRZ A3 (+ :MEM 'X))



     11.3  LES PSEUDOS-INSTRUCTIONS

     LAP connait un certain nombre de pseudos-instructions dont la  forme
     externe est identique a celle des instruction normales.


     (COMMENT ...  ) ou (* ...  )
          cette pseudo-instruction est completement ignoree du LAP.  Elle
          permet  d'inserer des commentaires a l'interieur d'un programme
          LAP.


     (END)
          indique la fin d'un assemblage (un 2eme  peut  suivre  dans  la
          liste  des  instructions  fournie  au  LAP).   Cette pseudo est
          automatiquement  generee  en  fin  de  liste  (ou  de  fichier)
          d'instructions ;  elle n'est donc pas obligatoire.


     (ENTRY <nom> <type> <nombre>)
          permet de definir le point d'entree d'une fonction qui  devient
          une  fonction  standard  de VLISP.  Le nom de la fonction <nom>
          doit etre un atome litteral, le type  de  cette  fonction  peut
     VLISP 10 . 3    Manuel de Reference                        Page 11-4


          etre  SUBR ou FSUBR.  Si le type est SUBR on peut specifier son
          nombre  d'arguments  (si  cette  fonction  possede  un   nombre
          d'arguments plus petit ou egal a 3).
          ex :  (ENTRY FACT SUBR 1)


     (EVAL <s>)
          evalue  l'expression  <s>   specifiee   en   argument.    Cette
          pseudo-instruction  ne  charge  aucun  mot  memoire mais permet
          d'acceder directement a l'interprete.
          ex:  (EVAL (PRINT "2eme partie."))


     (EXP <adr>)
          reserve un mot qui est initialise avec la valeur de <adr>.
          ex :  (EXP -1)


     (OPCD <symbole> <valeur>)
          permet de  definir  de  nouveaux  mnemoniques  pour  les  codes
          instructions.
          ex :  (OPCD PJRST \254)


     (QUOTE <s>) ou bien ' <s> 
          reserve un mot contenant  un  pointeur  sur  l'objet  lisp  <s>
          specifie.


     (REGISTER <symbole> <valeur>)
          permet de definir de nouveaux mnemoniques pour  les  regsitres.
          L'argument  <symbole> doit etre un atome litteral, et sa valeur
          associee <valeur> doit etre comprise  dans  l'intervalle  [0  ,
          15].
          ex :  (REGISTER PILE \17)


     (VALAP <symbole> <valeur>)
          permet de definir de  nouveaux  symboles  dont  la  valeur  est
          donnee  explicitement.  L'argument <symbole> doit etre un atome
          litteral et sa valeur <valeur> numerique.
          ex :  (VALAP :JBSYM \116)


     (XWD <adr> <adr> ) abreviation [<adr> <adr>]
          reserve un mot dont les 2 demis-mots sont initialises avec  les
          valeurs des operandes fournis.
          ex :  (XWD -1 (+ :MEM (* 3)))
     VLISP 10 . 3    Manuel de Reference                        Page 11-5


     11.4  LES MACROS-LAP 

     Il est possible  de  definir  des  macros  en  utilisant  la  pseudo
     suivante :

     (MACLAP <nom> <liste d'argument> <corps de la fonction> )

          cette pseudo-instruction permet de  definir  les  MACLAP  .   A
          l'apparition  d'une  intruction  de  la  forme (<nom> <arg1> ..
          <argN>) dans  laquelle  <nom>  est  le  nom  d'une  MACLAP,  la
          fonction  specifiee  est appellee avec <arg1> ...  <argN> comme
          arguments.  C'est la valeur ramenee par cette  application  qui
          est assemblee.  Cette valeur doit etre une liste d'instructions
          LAP (qui sera donc reassemblee) ou bien  NIL  auquel  cas  rien
          n'est assemble,

          exemple de definition de MACLAP :

          (MACLAP INCR (ATOM)
             [['HLRZ 1 ['+ ':MEM [QUOTE ATOM]]]
              '(PUSHJ P ADD1)
              ['HRLM 1 ['+ ':MEM [QUOTE ATOM]]]])

          l'appel de  (INCR X) 
          sera expanse en  (HLRZ 1 (+ :MEM 'X))
                           (PUSHJ P ADD1)
                           (HRLM 1 (+ :MEM 'X))

     Les  MACLAPs  sont  tres  puissantes  car  elles  donnent  acces   a
     l'interprete    lui-meme    et    permettent    de    deninir    des
     pseudos-instructions tres sophistiquees.
     Ces MACROs sont toujours traitees en premier  lieu;   on  peut  donc
     redefinir toutes les instructions ainsi que les pseudos-instructions
     standards.


     Il existe un certain nombre de MACLAP predefinies qui possedent  les
     definitions suivantes :

     CAR             (MACLAP CAR (D S) [['HLRZ D ':MEM S]])

     CDR             (MACLAP CDR (D S) [['HRRZ D ':MEM S]])

     JPLIST          (MACLAP JPLIST (R A)
                             [['CAMGE R ':BLIST]
                              ['JRST 0 A]])

     JNLIST          (MACLAP JNLIST (R A)
                             [['CAML R ':BLIST]
                              ['JRST 0 A]])

     CONS            (MACLAP CONS (R)
     VLISP 10 . 3    Manuel de Reference                        Page 11-6


                             [ '(JUMPN FREE (* 2))
                               '(PUSHJ P :GARBCL)
                               ['EXCH R ':MEM 'FREE]
                               ['EXCH 'FREE R]])

     UNCONS          (MACLAP UNCONS (R CAR CDR)
                        (IF (NEQ R CDR)
                             [['HRRZ CDR ':MEM R]
                              ['HLRZ CAR ':MEM R]]
                             [['HLRZ CAR ':MEM R]
                              ['HRRZ CDR ':MEM R]])



     11.5  ACCES AUX OBJETS LISPS

     Les atomes litteraux, les nombres, les chaines et  les  listes  sont
     stockees  dans  des zones fixes du LOWSEG.  Ces objets sont toujours
     representes d'une maniere interne par un -pointeur- sur ces  zones ;
     ce pointeur n'est pas une adresse physique mais un index par-rapport
     au debut de cette zone.  On a acces aux  limites  de  ces  zones  au
     moyen  de  symboles  speciaux (dont le 1er caractere est un ":") qui
     sont connus du LAP.

     :MEM            adresse physique du debut
                             de la zone des objets LISPs.

        - ZONE DES ATOMES LITTERAUX -

     :BNUMB          index du debut de la zone 
                             des nombres.

        - ZONE DES NOMBRES -

     :BSTRG          index du debut de la zone
                             des chaines.

        - ZONE DES CHAINES -

     :BLIST          index du debut de la zone
                             des listes.

        - ZONE DES LISTES -



     11.6  TEST DE TYPE

     Grace a ce decoupage de la memoire, le test de type se ramene a  une
     comparaison  avec  les limites des zones, ce qui est tres efficient.
     Le 1er atome stocke dans la zone des atomes  litteraux  est  l'atome
     NIL ;   la  valeur de son index est 0 ;  les tests par-rapport a NIL
     VLISP 10 . 3    Manuel de Reference                        Page 11-7


     peuvent se coder en une seule instruction (JUMPE ou JUMPN).

     ex : branchement si A1 est un nombre
          (CAML A1 :BNUMB)
          (CAML A1 :BSTRG)
          (JRST 0 quelquepart)



     11.7  CREATION D'OBJETS

     Pour creer un atome litteral, il faut preparer dans un petit  buffer
     (de  3  mots)  de  nom :PNAME (ce nom est connu de LAP) le P-name de
     l'atome  que  l'on  veut  creer  puis  appeller   une   routine   de
     l'interprete  de  nom :TRYATOM au moyen d'un (PUSHJ P :TRYATOM).  Ce
     buffer doit contenir les caracteres de P-name en code ASCII.  Le 1er
     caractere  doit  etre  le  nombre total de caracteres du P-name.  Ce
     buffer est complete avec des 0.  Au retour le registre  A1  contient
     le pointeur sur ce nouvel atome.

     Pour creer un nombre, il faut mettre sa valeur dans le  registre  A5
     puis appeller la routine :CRANUM pour creer un nombre entier ou bien
     la routine :CRAFLT pour un nombre flottant au moyen  d'un  (PUSHJ  P
     :CRANUM  /  :CRAFLT).  Au retour le registre A1 contient le pointeur
     sur ce nouveau nombre.

     Pour creer une chaine, il faut mettre la liste  contenant  tous  les
     caracteres  (sous  forme atomique) dans le registre A1 puis appeller
     la routine de l'interprete :CRASTR au moyen d'un (PUSHJ P  :CRASTR).
     Au  retour  le  registre  A1 contient le pointeur sur cette nouvelle
     chaine.

     On peut creer un doublet de liste directement.  Il faut preparer  un
     registre quelconque (A1 A2 A3 ou A4) avec en partie gauche le CAR du
     doublet et en partie droite son CDR puis tester si  la  liste  libre
     des  doublets  (pointee par le registre FREE) n'est pas vide (auquel
     cas il faut appeller le "Garbage-Collecting") et  enfin  stocker  le
     doublet et actualiser FREE.  Ces operations peuvent s'ecrire :

               ; preparation du registre A1
          (JUMPN FREE (* 2)) ; si FREE est vide, 
          (PUSHJ P :GARBCL ) ; appeller le G.C.
          (EXCH A1 :MEM FREE)        ; creation du doublet
          (EXCH FREE A1)             ; actualisation de FREE
               ; le pointeur obtenu se trouve dans A1
     VLISP 10 . 3    Manuel de Reference                        Page 11-8


     11.8  APPEL DES FONCTIONS

     Toutes les fonctions de l'interprete sont appellees  au  moyen  d'un
     PUSHJ  P  a  l'adresse  de  lancement  de  la  fonction.  Toutes les
     fonctions doivent donc se terminer par un POPJ P.  Les arguments des
     fonctions  sont  transmis  dans  differents registres en fonction du
     type   de   la   fonction.    Cette   transmission   est   effectuee
     automatiquement,  avant  l'appel  des  fonctions,  par les fonctions
     interprete EVAL ou APPLY.  Quelque soit le type d'une  fonction,  sa
     valeur  est toujours retournee dans le registre A1 (il faut donc que
     ce registre soit charge  avant  le  retour  de  la  fonction).   Les
     fonctions  de type SUBRs a 1 argument recoivent leur argument evalue
     dans le registre  A1,  les  SUBRs  a  2  arguments  recoivent  leurs
     arguments evalues dans les registres A1 (pour le 1er) et A2 (pour le
     2eme), les SUBRs a 3 arguments recoivent leurs argments evalues dans
     les  registres  A1  (pour  le  1er) A2 (pour le 2eme) et A3 (pour le
     3eme), les SUBRs a nombre quelconque d'arguments recoivent une liste
     contenant  tous  les  arguments  evalues  dans  le  registre A4, les
     fonctions  de  type  FSUBRs  recoivent  la   liste   des   arguments
     non-evalues dans le registre A1.



     11.9  LES FONCTIONS STANDARDS UTILISEES PAR LE LAP

     Le  LAP  utilise  un  certain  nombre  de  fonctions  speciales   de
     l'interprete.  Ces fonctions sont tout naturellement disponibles.

     (GETSYMBOL <a>) [SUBR a 1 argument]

          ramene la valeur du symbole atomique <a>.  Cet  atome  litteral
          doit  commencer par le caractere special :  et avoir moins de 7
          caracteres au total donc etre de la forme :xxxxxx .  Si l'atome
          <a> ne possede pas de valeur, GETSYMBOL ramene NIL.

          ex : (GETSYMBOL ':GARBCL)   ->   1220     (par exemple)
               (GETSYMBOL ':XYZ)      ->   NIL


     (OPCD <a>) [SUBR a 1 argument]

          ramene le code operation de l'instruction de nom <a>.   Si  <a>
          n'est pas un mnemonique d'une fonction connue, OPCD ramene NIL.

          ex : (OPCD 'JRST)  ->  254
               (OPCD 'PJRST) ->  NIL
     VLISP 10 . 3    Manuel de Reference                        Page 11-9


     (REGISTER <a>) [SUBR a 1 argument]

          ramene la valeur de l'atome <a> considere  comme  le  nom  d'un
          registre.    Cette   fonction  connait  le  nom  des  registres
          standards.  Si <a> n'est pas le  nom  d'un  registre  standard,
          REGISTER ramene NIL.

          ex : (REGISTER 'A5)  ->  5
               (REGISTER 'A9)  ->  NIL



     11.10  LES FONCTIONS STANDARDS DU LAP

     Les fonctions du LAP sont de  type  AUTOLOAD  (i.e.   il  n'est  pas
     besion  de  charger  le fichier qui les contient, le systeme le fera
     automatiquement  pour  vous  au  premier  appel  de  l'une  de   ces
     fonctions).
     D'ordinaire ces fonctions se trouvent dans le fichier :
        (SYS (LODLAP . VLI)) pour la version interpretee
        (SYS (LODLAP . VLA)) pour la version compilee lisible
        (SYS (LODLAP . VLO)) pour la version compilee chargeable


     (LAP <l> <sw1>) [SUBR a 2 arguments]

          est la principale fonction du LAP.   Le  premier  argument  <l>
          doit  etre  une liste d'instructions LAP;  le deuxieme argument
          <sw1> est un indicateur qui vaut T si vous desirez  un  listage
          de  l'assemblage.   Le LAP etant un assembleur "une passe", les
          adresses des "references  avant"  ne  sont  pas  correctes  (et
          valent toujours 0).


     (LAPFILE <filout> <filin> <sw1>) [SUBR a 3 arguments]

          le fichier d'entree <filin> est un fichier qui ne doit contenir
          que  des instructions LAP.  LAPFILE va assembler et charger ces
          instructions.  Le fichier de sortie  <filout>  contiendra  tous
          les points d'entree du fichier charge, ainsi que les erreurs le
          cas  echeant.   Si  l'indicateur  <sw1> = T   un   listage   de
          l'assemblage  sera  produit  egalement sur le fichier de sortie
          <filout>.  Comme pour la fonction LAP, l'assembleur n'executant
          qu'une passe, les adresses des "references avant" ne seront pas
          correctes (et auront toujours la valeur 0).  Si le  fichier  de
          sortie  <filout> n'est pas fourni (i.e.  si <filout> = NIL), le
          fichier   (DSK (LODLAP . LOD) (GETPPN) \055)   sera    utilise.
          L'extension standard des fichiers de sortie de LAPFILE est .LOD
          .  Si le fichier d'entree <filin> n'est pas  fourni  (i.e.   si
          <filin> = NIL)  le  fichier  (DSK (LODLAP . VLA) (GETPPN)) sera
          utilise.  L'extension standard des fichiers d'entree de LAPFILE
          est .VLA .
     VLISP 10 . 3    Manuel de Reference                       Page 11-10


          LAPFILE ramene en valeur le nom du fichier de sortie utilise.


     (LAPF <file> <sw1>) [FSUBR]

          est une forme abregee de la fonction  LAPFILE.   L'appel  (LAPF
          <file> <sw1>) correspond a l'appel suivant :
             (LAPFILE '(DSK (<file> . LOD) (GETPPN) \055) 
                      '(DSK (<file> . VLA))
                      <sw1>)
          LAPF permet  donc  de  charger  un  fichier  d'intructions  LAP
          d'extension  .VLA  comme  par  exemple  des  fichiers  issus du
          compilateur.


     (LAPEND) [SUBR a 0 argument]

          permet de recuperer la place occupee par les fonctions du  LAP,
          ainsi  que  les  indicateurs  places sur certains atomes par le
          LAP.  Si certains atomes contiennent  toujours  des  references
          non   resolues   (ces   atomes   possedent   sur  leur  P-liste
          l'indicateur *UDS ), un avertissement est donne sous la forme :
          ** undefined symbol :  le nom de la fonction toujours inconnue.



     11.11  LES ERREURS DETECTEES PAR LE LAP

     Durant l'assemblage, un certain nombre d'erreurs sont detectees  par
     le  LAP.  Ces erreurs ne sont jamais fatales mais le code genere est
     bien evidemment faux.  Le libelle d'erreur est le suivant :
        ** lod error : <type> = <arg>
     dans lequel le  type  de  l'erreur  <type>  est  imprime  ainsi  que
     l'argument defectueux.

     Les differents types d'erreur sont :

     ADRESS - l'operande de type <adr> est erronne.

     GETSYMBOL - un symbole commencepar  le  caractere  special  :   mais
          n'est  pas connu de l fonction GETSYMBOL et n'a pas ete declare
          au moyen de la pseudo-instruction VALAP.

     LOD ou LODMEM - instruction inconnue.

     OPCD - le champ <opcd> d'une instruction est mal  code  ou  bien  la
          pseudo-instruction OPCD est mal employee.

     REG - un des champs <registre>  ou  <index>  d'une  instruction  est
          incorrect.
     VLISP 10 . 3    Manuel de Reference                       Page 11-11


     REGISTER - mauvaise utilisation de la pseudo-instruction REGISTER.



     11.12  EXEMPLES D'UTILISATION DU LAP

     11.13  LE LAPACK

     Les fichiers contenant du LAP (d'extension .VLA) sont tres  lisibles
     mais  sont  volumineux  et longs a charger.  Les fonctions du LAPACK
     vont tasser des instructions LAP en effectuant  une  premiere  passe
     qui  va  resoudre  toutes  les  references  absolues,  les  noms  de
     registres, les codes instructions et d'une maniere generale tout  ce
     qui  n'est  pas  relocatable.  Le resultat en est une nouvelle liste
     (ou un nouveau fichier) d'instructions  LAP  "tassees",  chargeables
     plus rapidement mai devenues "illisibles".

     Les fonctions du LAPACK sont de type AUTOLOAD (i.e.   il  n'est  pas
     besion  de  charger  le fichier qui les contient, le systeme le fera
     pour  vous  automatiquement  au  premier  appel  de  l'une  de   ces
     fonctions.
     D'ordinaire ces fonctions se trouvent dans le fichier :
        (SYS (LAPACK . VLI)) pour la version interpretee
        (SYS (LAPACK .  VLA)) pour la version compilee lisible
        (SYS (LAPACK .  VLO)) pour la version chargeable


     (LAPACK <l>) [SUBR a 1 argument]

          tasse la liste d'instructions LAP <l>, et ramene  une  nouvelle
          liste d'instructions tassees.


     (LAPACKFILE <filout> <filin>) [SUBR a 2 arguments]

          Le fichier <filin> est un  fichier  qui  ne  contient  que  des
          instructions  LAP,  LAPACKFILE  va  creer  un  nouveau  fichier
          <filout>  qui  contiendra  toutes  les  intructionsdu   fichier
          d'entree  <filin> en format tasse.  Ce nouveau fichier est bien
          entendu cahrgeable par le LAP.
          Si le fichier de sortie <filout> n'est  pas  fourni  (i.e.   si
          <filout> = NIL)            alors           le           fichier
          (DSK (LAPACK . VLO) (GETPPN) \055)  est  utilise.   L'extension
          standard des fichiers de sortie du LAPACKFILE est .VLO .  Si le
          fichier  d'entree  <filin>   n'est   pas   fourni   (i.e.    si
          <filin> = NIL)  alors  le fichier (DSK (LAPACK . VLA) (GETPPN))
          est utilise.  L'extension standard  des  fichiers  d'entree  du
          LAPACKFILE est .VLA .
          LAPACKFILE ramene  en  valeur  le  nom  du  fichier  de  sortie
          utilise.
     VLISP 10 . 3    Manuel de Reference                       Page 11-12


     (LAPACKF <file> <sw1>) [FSUBR]

          est une forme  abregee  de  la  fonction  LAPACKFILE.   L'appel
          (LAPACKF <file> <sw1>) correspond a l'appel suivant :
             (LAPACKFILE '(DSK (<file> . VLO) (GETPPN) \055) 
                      '(DSK (<file> . VLA))
                      <sw1>)
          LAPACKF permet donc de  tasser  un  fichier  d'intructions  LAP
          d'extension  .VLA  comme  par  exemple  des  fichiers  issus du
          compilateur.



     11.14  EXEMPLES D'UTLISATION DU LAPACK

                                                             Page Index-1


                      TABLE D'INDEX DU LAP ET DU LAPACK.




     (* ... )  peudo LAP  . . . . . . . 11-3
     (CAR d s)   macro LAP  . . . . . . 11-5
     (CDR d s)   macro LAP  . . . . . . 11-5
     (COMMENT ... )  pseudo LAP . . . . 11-3
     (CONS r)   macro LAP . . . . . . . 11-5
     (END)  pseudo LAP  . . . . . . . . 11-3
     (ENTRY nom type nombre)  pseudo LAP  11-3
     (EVAL s)  pseudo LAP . . . . . . . 11-4
     (EXP adr)  pseudo LAP  . . . . . . 11-4
     (GETSYMBOL a)  SUBR a 1 argument . 11-8
     (JNLIST r a)   macro LAP . . . . . 11-5
     (JPLIST r a)   macro LAP . . . . . 11-5
     (LAP l sw1)   SUBR a 2 arguments . 11-9
     (LAPACK l)   SUBR a 1 argument . . 11-11
     (LAPACKF file sw1)  FSUBR  . . . . 11-12
     (LAPACKFILE filout filin)   SUBR a 2 arguments  11-11
     (LAPEND)  SUBR a 0 argument  . . . 11-10
     (LAPF file sw1)  FSUBR . . . . . . 11-10
     (LAPFILE filout filin sw1)   SUBR a 3 arguments  11-9
     (MACLAP nom arg corps)  pseudo LAP  11-5
     (OPCD a)  SUBR a 1 argument  . . . 11-8
     (OPCD symbole valeur)  pseudo LAP  11-4
     (QUOTE s)  pseudo LAP  . . . . . . 11-4
     (REGISTER a)  SUBR a 1 argument  . 11-9
     (REGISTER symbole valeur)  pseudo LAP  11-4
     (UNCONS r car cdr)   macro LAP . . 11-6
     (VALAP symbole valeur)  pseudo LAP  11-4
     (XWD adr1 adr2)  pseudo LAP  . . . 11-4

     *  . . . . . . . . . . . . . . . . 11-3
     ** lod error : <type> = <arg>  . . 11-10
     ** no room for code. . . . . . . . 11-1
     ** undefined symbol  . . . . . . . 11-10
     *UDS . . . . . . . . . . . . . . . 11-10

     +  . . . . . . . . . . . . . . . . 11-3

     .LOD . . . . . . . . . . . . . . . 11-9
     .VLA . . . . . . . . . . . . . . . 11-9, 11-11
     .VLO . . . . . . . . . . . . . . . 11-11

     :  . . . . . . . . . . . . . . . . 11-3
     :BLIST . . . . . . . . . . . . . . 11-6
     :BNUMB . . . . . . . . . . . . . . 11-6
     :BSTRG . . . . . . . . . . . . . . 11-6
     :CRAFLT  . . . . . . . . . . . . . 11-7
     :CRANUM  . . . . . . . . . . . . . 11-7
     :CRASTR  . . . . . . . . . . . . . 11-7
     :GARBCL  . . . . . . . . . . . . . 11-7
     :MEM . . . . . . . . . . . . . . . 11-3, 11-6
     :PNAME . . . . . . . . . . . . . . 11-7
     :TRYATOM . . . . . . . . . . . . . 11-7

     @  . . . . . . . . . . . . . . . . 11-2

     A1 . . . . . . . . . . . . . . . . 11-1
     A2 . . . . . . . . . . . . . . . . 11-1
     A3 . . . . . . . . . . . . . . . . 11-1
     A4 . . . . . . . . . . . . . . . . 11-1
     A5 . . . . . . . . . . . . . . . . 11-2
     A6 . . . . . . . . . . . . . . . . 11-2
     A7 . . . . . . . . . . . . . . . . 11-2
     A8 . . . . . . . . . . . . . . . . 11-2

     CAR  . . . . . . . . . . . . . . . 11-5
     CDR  . . . . . . . . . . . . . . . 11-5
     CONS . . . . . . . . . . . . . . . 11-5

     FREE . . . . . . . . . . . . . . . 11-2

     JNLIST . . . . . . . . . . . . . . 11-5
     JPLIST . . . . . . . . . . . . . . 11-5

     L  . . . . . . . . . . . . . . . . 11-2
     LAP  . . . . . . . . . . . . . . . 11-1
     LINK-10  . . . . . . . . . . . . . 11-3

     MACLAP . . . . . . . . . . . . . . 11-5

     NIL  . . . . . . . . . . . . . . . 11-6
     NUMB . . . . . . . . . . . . . . . 11-2

     P  . . . . . . . . . . . . . . . . 11-2

     QUOTE  . . . . . . . . . . . . . . 11-3

     Registres  . . . . . . . . . . . . 11-1
     RG . . . . . . . . . . . . . . . . 11-1

     STRG . . . . . . . . . . . . . . . 11-2

     U1 . . . . . . . . . . . . . . . . 11-2
     U2 . . . . . . . . . . . . . . . . 11-2
     UNCONS . . . . . . . . . . . . . . 11-6